package com.example.test.advice.第七章_泛型和反射.建议108_反射让模板方法模式更强大;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public abstract class AbsPopulator {

    //模板方法
    public void dataInitialing() throws Exception{
        //获取的所有public方法
        Method[] methods = getClass().getMethods();
        for(Method method:methods){
            if(isInitDataMethod(method)){
                method.invoke(this);
            }
        }
    }

    private boolean isInitDataMethod(Method method){

        return method.getName().startsWith("init")
                && Modifier.isPublic(method.getModifiers())//贡藕给你方法
                && method.getReturnType().equals(Void.TYPE)//无返回值
                && !method.isVarArgs()//输入参数为空
                && !Modifier.isAbstract(method.getModifiers());//不是抽象方法
    }
}
